# Definition for singly-linked list.
"""
给定一个链表，两两交换其中相邻的节点，并返回交换后的链表。

你不能只是单纯的改变节点内部的值，而是需要实际的进行节点交换。

 

示例:

给定 1->2->3->4, 你应该返回 2->1->4->3.
"""

from list_node import ListNode, get_value


class Solution:
    def swapPairs(self, head: ListNode) -> ListNode:
        if head is None or head.next is None:
            return head
        
        next = head.next
        head.next = self.swapPairs(next.next)
        next.next = head
        return next


def test():
    a = ListNode(1)
    b = ListNode(2)
    c = ListNode(3)
    d = ListNode(4)

    a.next = b
    b.next = c
    c.next = d
    x = Solution().swapPairs(a)
    assert get_value(x) == [2, 1, 4, 3]
